package com.itlong.cloud.operate.dao;

import com.itlong.cloud.POJO.DTO.operate.OperateProductTypeManageGetDTO;
import com.itlong.cloud.POJO.PO.AssignmentProductModelRelationPO;
import com.itlong.cloud.POJO.PO.OperateUserInfoPO;
import com.itlong.cloud.POJO.VO.operate.OperateAssignProductModelRelationGetVO;
import com.itlong.cloud.POJO.VO.operate.OperateProductTypeManageGetVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      运营-产品类型管理持久层接口
 * </desc>
 *
 * @createDate 2020/12/03
 */
@Mapper
@Repository
public interface IOperateProductTypeManageDao {




    /**
     * <desc>
     *      获取任务书产品类型列表
     * </desc>
     *
     * @return 任务书产品类型列表
     * @author pengwei
     * @createDate 2020/12/03
     */
    List<OperateProductTypeManageGetVO> getPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取任务书产品类型列表总记录数
     * </desc>
     *
     * @return 任务书产品类型列表总记录数
     * @author  pengwei
     * @createDate 2020/12/03
     */
    Integer getRecordCount(Map<String, Object> params);

    /**
     * <desc>
     *      获取任务书产品类型详情
     * </desc>
     *
     * @return 任务书产品类型详情
     * @author  pengwei
     * @createDate 2020/12/03
     */
    OperateProductTypeManageGetVO getOne(OperateProductTypeManageGetDTO dto);

    /**
     * <desc>
     *     删除任务书产品类型
     * </desc>
     *
     * @return 删除任务书产品类型
     * @author  pengwei
     * @createDate 2020/12/03
     */
    Integer delete(OperateProductTypeManageGetDTO dto);

    /**
     * <desc>
     *     删除与产品类型相关的中间表信息
     * </desc>
     *
     * @return 删除任务书产品类型
     * @author  pengwei
     * @createDate 2020/12/03
     */
     void  batchDeleteRelatedData(@Param("assignmentProcId")  String assignmentProcId);

    /**
     * <desc>
     *      获取运营该用户信息
     * </desc>
     *
     * @param myUserName 用户id
     * @return 用户信息
     * @author pengwei
     * @createDate 2020/12/03
     */
    OperateUserInfoPO getOperateUserPO(@Param("userId") String myUserName);

    /**
     * <desc>
     *      保存
     * </desc>
     *
     * @param map 参数集
     * @return 保存的行数
     * @author pengwei
     * @createDate 2020/12/03
     */
    Integer save(Map<String, Object> map);




    /**
     * <desc>
     *      批量保存产品类型型号关联数据
     * </desc>
     *
     * @param list 产品类型型号关联数据
     * @return 0 失败，1 成功
     * @author pengwei
     * @createDate 2020/12/03
     */
    Integer batchSaveProductTypeModelRelationData(List<AssignmentProductModelRelationPO> list);

    /**
     * <desc>
     *      修改
     * </desc>
     *
     * @param map 参数集
     * @return 保存的行数
     * @author pengwei
     * @createDate 2020/12/03
     */
    Integer update(Map<String, Object> map);


    /**
     * <desc>
     *      获取任务书产品类型关联产品型号列表
     * </desc>
     *
     * @return 任务书产品类型关联产品型号列表
     * @author pengwei
     * @createDate 2020/12/03
     */
    List<OperateAssignProductModelRelationGetVO> getRelatedProcModelPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取任务书产品类型关联产品型号列表总记录数
     * </desc>
     *
     * @return 任务书产品类型关联产品型号列表总记录数
     * @author  pengwei
     * @createDate 2020/12/03
     */
    Integer getRelatedProcModelRecordCount(Map<String, Object> params);

    /**
     * <desc>
     *      获取产品型号列表
     * </desc>
     *
     * @return 产品型号列表
     * @author pengwei
     * @createDate 2020/12/03
     */
    List<OperateAssignProductModelRelationGetVO> getProcModelPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取产品型号列表总记录数
     * </desc>
     *
     * @return 产品型号列表总记录数
     * @author  pengwei
     * @createDate 2020/12/03
     */
    Integer getProcModelRecordCount(Map<String, Object> params);


    /**
     * <desc>
     *      获取产品类型关联的产品型号全量列表
     * </desc>
     *
     * @return
     * @author pengwei
     * @createDate 2020/12/03
     */
    List<OperateAssignProductModelRelationGetVO> getRelatedProcModelList(@Param("assignmentProcId")  String assignmentProcId);


    /**
     * <desc>
     *      任务书关联产品类型--产品名称查询相同的记录数
     * </desc>
     *
     * @param assignmentProcId 任务书关联产品类型Id
     * @param productName 产品名称
     * @return 任务书关联产品类型--产品名称查询相同的记录数
     * @author pengwei
     * @createDate 2020/12/21
     */
    int querySameProductNameCnt(@Param("assignmentProcId") String  assignmentProcId,@Param("productName") String  productName, @Param("feeType") Integer feeType);


    /**
     * <desc>
     *      任务书关联产品类型--匹配顺序查询相同的记录数
     * </desc>
     *
     * @param assignmentProcId 任务书关联产品类型Id
     * @param order 匹配顺序
     * @return 任务书关联产品类型--产品名称查询相同的记录数
     * @author pengwei
     * @createDate 2020/12/21
     */
    int querySameOrderCnt(@Param("assignmentProcId") String  assignmentProcId,@Param("order") String  order, @Param("feeType") Integer feeType);

    /**
     * <desc>
     *      获取产品类型下的产品信息列表
     * </desc>
     *
     * @param productType 产品类型 1电梯类 2门禁类 3人脸类 4对讲类
     * @return
     * @Author Zhu.yj
     * @createDate  2021/2/22
     */
    List<Map<String, Object>> getAssignmentTypeList(String productType);
}
